package view
{
	import flash.events.Event;
	
	import model.AnneeEtude;
	import model.Enseignement;
	import model.Matiere;
	import model.TypeEnseignement;
	import model.proxy.EnseignementProxy;
	
	import org.puremvc.as3.interfaces.IMediator;
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.mediator.Mediator;
	
	import view.components.EnseignementPanel;

	public class EnseignementPanelMediator extends Mediator implements IMediator 
	{ 
		
		public static const NAME : String = 'EnseignementPanelMediator'; 
			
		/** 
		 * Constructor 
		 * Listen event of the component to send notification 
		 */ 
		 public function EnseignementPanelMediator(viewComponent : EnseignementPanel) 
		 { 
		 	super(NAME, viewComponent);
		 	viewComponent.addEventListener(EnseignementPanel.OBTENIR_LISTE_ENSEIGNEMENTS, obtenirListeEnseignements);
		 	viewComponent.addEventListener(EnseignementPanel.OBTENIR_LISTE_TYPES_ENSEIGNEMENT, obtenirListeTypesEnseignement);
		 	viewComponent.addEventListener(EnseignementPanel.OBTENIR_LISTE_MATIERES, obtenirListeMatieres);
		 	viewComponent.addEventListener(EnseignementPanel.VALIDER_AJOUT_ENSEIGNEMENT, validerAjoutEnseignement);
		 	viewComponent.addEventListener(EnseignementPanel.VALIDER_MODIF_ENSEIGNEMENT, validerModifEnseignement);
		 	viewComponent.addEventListener(EnseignementPanel.SUPPRIMER_ENSEIGNEMENT, supprimerEnseignement);
		 	viewComponent.addEventListener(EnseignementPanel.OBTENIR_LISTE_ANNEES_UNIV_ENSEIGNEMENT, obtenirListeAnneesUnivEnseignement);
		 	viewComponent.addEventListener(EnseignementPanel.OBTENIR_LISTE_ANNEES_ETUDE_ENSEIGNEMENT, obtenirListeAnneesEtudeEnseignement);
		 } 
		 
		 private function obtenirListeEnseignements(event:Event):void
		 {
		 	var anneeEtude:AnneeEtude = enseignementPanel.annee_etude.selectedItem as AnneeEtude;
		 	sendNotification(EnseignementPanel.OBTENIR_LISTE_ENSEIGNEMENTS, anneeEtude);
		 }

		 private function obtenirListeTypesEnseignement(event:Event):void
		 {
		 	sendNotification(EnseignementPanel.OBTENIR_LISTE_TYPES_ENSEIGNEMENT, null);
		 }
		 
		 private function obtenirListeMatieres(event:Event):void
		 {
		 	var anneeEtude:AnneeEtude = enseignementPanel.annee_etude.selectedItem as AnneeEtude;
		 	sendNotification(EnseignementPanel.OBTENIR_LISTE_MATIERES, anneeEtude);
		 }
		 
		 private function validerAjoutEnseignement(event:Event):void
		 {
		 	var enseignement:Enseignement = new Enseignement();
		 	enseignement.id_an_etude = (enseignementPanel.annee_etude.selectedItem as AnneeEtude).id_an_etude;
		 	enseignement.aAnneeEtude = enseignementPanel.annee_etude.selectedItem as AnneeEtude;
		 	enseignement.id_matiere = (enseignementPanel.matiere.selectedItem as Matiere).id_matiere;
		 	enseignement.id_type_ens = (enseignementPanel.type_enseignement.selectedItem as TypeEnseignement).id_type_ens;
		 	enseignement.duree_matiere = parseInt(enseignementPanel.duree_matiere.text);
		 	enseignement.nb_gpe = parseInt(enseignementPanel.nb_gpe.text);
		 			 	
		 	sendNotification(EnseignementPanel.VALIDER_AJOUT_ENSEIGNEMENT, enseignement);
		 }

		 private function validerModifEnseignement(event:Event):void
		 {
		 	var enseignement:Enseignement = (enseignementPanel.affiche.selectedItem as Enseignement);
		 	if( enseignementPanel.annee_etude.selectedItem != null )
		 	{
			 	enseignement.id_an_etude = (enseignementPanel.annee_etude.selectedItem as AnneeEtude).id_an_etude;
			 	enseignement.aAnneeEtude = enseignementPanel.annee_etude.selectedItem as AnneeEtude;		 		
		 	}
			if( enseignementPanel.matiere.selectedItem != null )
			{
		 		enseignement.id_matiere = (enseignementPanel.matiere.selectedItem as Matiere).id_matiere;				
			}
			if( enseignementPanel.type_enseignement.selectedItem != null )
			{
		 		enseignement.id_type_ens = (enseignementPanel.type_enseignement.selectedItem as TypeEnseignement).id_type_ens;				
			}
			if( enseignementPanel.duree_matiere.text != "" )
			{
				 enseignement.duree_matiere = parseInt(enseignementPanel.duree_matiere.text);		
			}
			if( enseignementPanel.nb_gpe.text != "" )
			{
		 		enseignement.nb_gpe = parseInt(enseignementPanel.nb_gpe.text);						
			}
 			sendNotification(EnseignementPanel.VALIDER_MODIF_ENSEIGNEMENT, enseignement);
		 }

		 private function supprimerEnseignement(event:Event):void
		 {
		 	var enseignement:Enseignement = (enseignementPanel.affiche.selectedItem as Enseignement);
		 	sendNotification(EnseignementPanel.SUPPRIMER_ENSEIGNEMENT, enseignement);
		 }
		 
		 private function obtenirListeAnneesUnivEnseignement(event : Event=null):void
		 {
		 	sendNotification(EnseignementPanel.OBTENIR_LISTE_ANNEES_UNIV_ENSEIGNEMENT, null);
		 }
		 
		 private function obtenirListeAnneesEtudeEnseignement(event : Event=null):void
		 {
		 	sendNotification(EnseignementPanel.OBTENIR_LISTE_ANNEES_ETUDE_ENSEIGNEMENT, enseignementPanel.comboAnneesUniv.selectedItem);
		 }
		 		 
		 /** 
		 * List of the notifications catched by this mediator 
		 */ 
		 override public function listNotificationInterests():Array 
		 { 
		 	return [ EnseignementProxy.LISTE_ENSEIGNEMENTS_OBTENUE,
		 			 EnseignementProxy.LISTE_TYPES_ENSEIGNEMENT_OBTENUE,
		 			 EnseignementProxy.LISTE_MATIERES_OBTENUE,
		 			 EnseignementProxy.LISTE_ANNEES_UNIV_OBTENUE,
		 			 EnseignementProxy.LISTE_ANNEES_ETUDE_OBTENUE ]; 
		 } 
		 
		 /** 
		 * Actions done when a notifications is catched 
		 */ 
		 override public function handleNotification(note : INotification):void 
		 { 
			 switch (note.getName()) 
			 {
			 	case EnseignementProxy.LISTE_ENSEIGNEMENTS_OBTENUE:
			 	{
			 		enseignementPanel.affiche.dataProvider = note.getBody() as Array;
			 	}
			 	break;
			 	
			 	case EnseignementProxy.LISTE_TYPES_ENSEIGNEMENT_OBTENUE:
			 	{
			 		enseignementPanel.type_enseignement.dataProvider = note.getBody() as Array;
			 		if (enseignementPanel.affiche.selectedItem != null) {
				 		var types:Array = enseignementPanel.type_enseignement.dataProvider.source as Array;
				 		var type:Number = (enseignementPanel.affiche.selectedItem as Enseignement).id_type_ens;
				 		for (var j:uint = 0 ; j<types.length ; j++) {
				 			if ((types[j] as TypeEnseignement).id_type_ens == type)
				 				enseignementPanel.type_enseignement.selectedIndex = j;
				 		}
				 	}
			 	}
			 	break;
			 	
			 	case EnseignementProxy.LISTE_MATIERES_OBTENUE:
			 	{
			 		enseignementPanel.matiere.dataProvider = note.getBody() as Array;
			 		if (enseignementPanel.affiche.selectedItem != null) {
				 		var matieres:Array = enseignementPanel.matiere.dataProvider.source as Array;
				 		var matiere:Number = (enseignementPanel.affiche.selectedItem as Enseignement).id_matiere
				 		for (var j:uint = 0 ; j<matieres.length ; j++) {
				 			if ((matieres[j] as Matiere).id_matiere == matiere)
				 				enseignementPanel.matiere.selectedIndex = j;
				 		}
				 	}
			 	}
			 	break;
			 	
			 	case EnseignementProxy.LISTE_ANNEES_UNIV_OBTENUE:
			 	{
			 		enseignementPanel.comboAnneesUniv.dataProvider = (note.getBody() as Array);
			 	}
			 	break;
			 	
			 	case EnseignementProxy.LISTE_ANNEES_ETUDE_OBTENUE:
			 	{
			 		enseignementPanel.annee_etude.dataProvider = (note.getBody() as Array);
			 		enseignementPanel.onChangeComboAnneeEtude();
			 	}

			 	default:
			 	break;
		 	 } 
		 } 
		 
		 /** 
		 * Get the loginPanel component 
		 */ 
		 private function get enseignementPanel():EnseignementPanel
		 { 
		 	return viewComponent as EnseignementPanel; 
		 }
	}
}